Aurora MySQL バージョン 3 での init_connect パラメータの注意点
こんにちは。テクニカルサポートチームのShiinaです。
はじめに
MySQL の init_connect パラメータは利用していますか?
上記パラメータは MySQL 接続時に特定の初期化処理などを実行したいときに利用できます。
利用する Aurora バージョンの違いによっては init_connect パラメータが適用できない場合があります。
今回は動作の違いについて検証してみました。
結論
Aurora MySQL バージョン 3 では CONNECTION_ADMIN 権限を持つユーザーには init_connect パラメータは適用されません。
Aurora MySQL DB インスタンスを作成時に登録されるマスターユーザー(デフォルト値:admin)は CONNECTION_ADMIN 権限を持つため、上記パラメータを適用することはできません。
init_connect パラメータとは
クライアントが MySQL サーバーに接続するたびに自動的に実行される SQL ステートメントを指定するために使用されるパラメータです。
この機能を利用することで、MySQL に接続時に特定の初期化処理を実行することが可能です。
例えば、特定のユーザアカウントに対しては自動コミットを無効化したいというケースなどに用いることができます。
都度セッションパラメータを一時的に変更して利用するシーンにおいては、設定の手間を減らすことができて便利な一面があります。
CONNECTION_ADMIN 権限とは
特定の接続管理タスクを実行するために必要な権限です。
この権限を持つユーザーは、他のユーザーの接続を管理したり、接続を強制的に終了する操作を行うことができます。
強力な権限であるため、慎重な管理と信頼できるユーザーにのみ付与することが推奨されます。
やってみた
Aurora MySQL バージョン 3 にて検証ユーザアカウントを利用して、CONNECTION_ADMIN 権限有無の違いによる動作検証を行ってみました。
検証環境
- エンジンバージョン
8.0.mysql_aurora.3.05.2
事前準備
パラメータグループファミリー aurora-mysql8.0 用のパラメータグループを作成し、次のようにパラメータを設定します。
- init_connect パラメータ
検証ユーザアカウント(testuser)に対して自動コミットを無効化するパラメータ値をパラメータグループに設定します。
SET autocommit=CASE CURRENT_USER() WHEN "testuser@%" THEN 0 ELSE 1 END;
- autocommit パラメータ
設定は行わず、デフォルト値である ON (自動コミットが有効)を利用します。
作成したパラメータグループを DB クラスターに関連付けします。
検証ユーザアカウントを登録し、テーブルの参照権限のみを付与しておきます。
CREATE USER 'testuser' IDENTIFIED BY 'yourpassword';
GRANT SELECT ON *.* TO 'testuser';
FLUSH PRIVILEGES;
CONNECTION_ADMIN 権限なしの場合
検証ユーザアカウントで Aurora MySQL に接続します。
mysql -p -u testuser -h test-database-1-instance-1.c9s4eucwustm.ap-northeast-1.rds.amazonaws.com
現在のユーザと autocommit の設定値を確認します。
mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| testuser@% |
+----------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set (0.01 sec)
init_connect パラメータが正しく適用されており、autocommit が OFF(自動コミットが無効化)になっていることが確認できます。
CONNECTION_ADMIN 権限ありの場合
では次に CONNECTION_ADMIN 権限が付与されている場合の動作について確認してみます。
検証ユーザアカウントに対して CONNECTION_ADMIN 権限を付与してみます。
mysql> GRANT CONNECTION_ADMIN ON *.* TO 'testuser';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
検証ユーザアカウントで再度 Aurora MySQL に接続します。
mysql -p -u testuser -h test-database-1-instance-1.c9s4eucwustm.ap-northeast-1.rds.amazonaws.com
現在のユーザと autocommit の設定値を確認します。
mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| testuser@% |
+----------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.01 sec)
autocommit が ON(自動コミットが有効化)になっており、init_connect パラメータが適用されていないことが確認できます。
まとめ
Aurora MySQL バージョン 3 では CONNECTION_ADMIN 権限を持つユーザーには init_connect パラメータは適用されません。
また、read_only パラメータも同様です。
上記パラメータを利用している場合は Aurora MySQL バージョン 2 からバージョン 3 へのアップグレードを行う際には注意が必要です。
最後までご覧いただきありがとうございました。
本記事が誰かのお役に立てれば幸いです。
参考